package com.edu.exam.enums.common;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 来源模块枚举
 *
 * 统一的来源模块管理，用于标识功能或数据的来源系统模块
 * 替代分散在各个实体中的重复来源模块定义
 *
 * @author System
 * @version 1.0.0
 * @since 2025-11-13
 */
public enum SourceModule implements BaseEnum {

    /**
     * E-03 上机考试组织
     */
    E_03("E_03", "E-03 上机考试组织"),

    /**
     * E-04 扫描阅卷处理
     */
    E_04("E_04", "E-04 扫描阅卷处理"),

    /**
     * E-01 考试安排管理
     */
    E_01("E_01", "E-01 考试安排管理"),

    /**
     * E-02 线上考试系统
     */
    E_02("E_02", "E-02 线上考试系统"),

    /**
     * E-05 成绩统计分析
     */
    E_05("E_05", "E-05 成绩统计分析"),

    /**
     * E-06 质量监控管理
     */
    E_06("E_06", "E-06 质量监控管理"),

    /**
     * B-01 课程管理模块
     */
    B_01("B_01", "B-01 课程管理模块"),

    /**
     * B-02 题库管理模块
     */
    B_02("B_02", "B-02 题库管理模块"),

    /**
     * B-03 试卷管理模块
     */
    B_03("B_03", "B-03 试卷管理模块"),

    /**
     * B-04 考核方案管理
     */
    B_04("B_04", "B-04 考核方案管理模块"),

    /**
     * F-01 用户管理模块
     */
    F_01("F_01", "F-01 用户管理模块"),

    /**
     * F-02 权限管理模块
     */
    F_02("F_02", "F-02 权限管理模块"),

    /**
     * F-03 组织架构管理
     */
    F_03("F_03", "F-03 组织架构管理模块"),

    /**
     * F-04 学籍管理模块
     */
    F_04("F_04", "F-04 学籍管理模块"),

    /**
     * F-05 行政班级管理
     */
    F_05("F_05", "F-05 行政班级管理模块"),

    /**
     * 系统核心模块
     */
    SYSTEM_CORE("SYSTEM_CORE", "系统核心模块"),

    /**
     * 数据同步模块
     */
    DATA_SYNC("DATA_SYNC", "数据同步模块"),

    /**
     * 报表统计模块
     */
    REPORT_STATS("REPORT_STATS", "报表统计模块"),

    /**
     * 外部接口模块
     */
    EXTERNAL_API("EXTERNAL_API", "外部接口模块"),

    /**
     * 手动输入
     */
    MANUAL_INPUT("MANUAL_INPUT", "手动输入"),

    /**
     * 批量导入
     */
    BATCH_IMPORT("BATCH_IMPORT", "批量导入"),

    /**
     * 自动生成
     */
    AUTO_GENERATED("AUTO_GENERATED", "自动生成");

    private final String code;
    private final String description;

    SourceModule(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 根据编码查找枚举值
     *
     * @param code 业务编码
     * @return 对应的枚举值，SYSTEM_CORE如果未找到
     */
    public static SourceModule fromCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return SYSTEM_CORE;
        }

        for (SourceModule module : values()) {
            if (module.getCode().equals(code)) {
                return module;
            }
        }
        return SYSTEM_CORE;
    }

    @Override
    public String toString() {
        return this.code + "(" + this.description + ")";
    }
}